/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import java.awt.Color;
import javax.swing.JOptionPane;

/**
 *
 * @author Jorge Maldonado
 */
public class lote extends propiedad {

    private int numCasas;
    private boolean hotel;
    private int precio_alquiler;
    private Color color;
    private boolean hipotecada;

    public lote(int id,int precio, int precio_alquiler, String descripcion, Color color) {
        propietario = null;
        numCasas = 0;
        hotel = false;
        hipotecada = false;
        this.precio = precio;
        this.precio_alquiler = precio_alquiler;
        this.descripcion = descripcion;
        this.color = color;
        tipo = TIPO_LOTE;
        this.id=id;
    }

    @Override
    public void adquirir(usuario propietario) {
        this.propietario = propietario;
        if(this.color==Color.MAGENTA){
            this.propietario.morado++;
        }else if(this.color==Color.CYAN){
            this.propietario.cian++;
        }else if(this.color==Color.PINK){
            this.propietario.violeta++;
        }else if(this.color==Color.ORANGE){
            this.propietario.naranja++;
        }else if(this.color==Color.RED){
            this.propietario.rojo++;
        }else if(this.color==Color.YELLOW){
            this.propietario.amarillo++;
        }else if(this.color==Color.GREEN){
            this.propietario.verde++;
        }else if(this.color==Color.BLUE){
            this.propietario.azul++;
        }
    }


    @Override
    public void cobrar(usuario pasa) {
        if (pasa != propietario && !this.isHipotecada()) {
            if (pasa.getDinero() < getCosto()) {
                if (pasa.tienePropiedades()) {
                    int resultado = JOptionPane.showConfirmDialog(null, "Desea hipotecar una propiedad para pagar?", "Atención", JOptionPane.INFORMATION_MESSAGE);
                    if (resultado == JOptionPane.OK_OPTION) {
                        hipoteca aux = new hipoteca(pasa);
                        propiedad temp = aux.mostrar();
                        if (temp != null) {
                            pasa.hipotecarPropiedad((lote) temp);
                            cobrar(pasa);
                        }
                    } else {
                        JOptionPane.showMessageDialog(null, "No dispone de dinero, por lo tanto se hará un prestamo al banco para cubrir la deuda", "Atencion", JOptionPane.INFORMATION_MESSAGE);
                        propietario.prestarDinero(pasa.getDinero() - getPrecio());
                        cobrar(pasa);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "No dispone de dinero, por lo tanto se hará un prestamo al banco para cubrir la deuda", "Atencion", JOptionPane.INFORMATION_MESSAGE);
                    propietario.prestarDinero(pasa.getDinero() - getPrecio());
                    cobrar(pasa);
                }
            } else {
                propietario.setDinero(propietario.getDinero() + getCosto());
                pasa.setDinero(pasa.getDinero() - getCosto());
                JOptionPane.showMessageDialog(null, "Usted ha pagado la suma de " + Float.toString(getCosto()), "Atencion", JOptionPane.INFORMATION_MESSAGE);

            }
        }
    }

    @Override
    public void Accion(usuario pasa) {
        if (propietario == null) {
            compra cmp = new compra(descripcion, Float.toString(getPrecio()), Float.toString(precio_alquiler), getColor());
            int resultado = cmp.mostrar();
            if (resultado == compra.COMPRA) {
                if(pasa.getDinero()<this.precio){
                    JOptionPane.showMessageDialog(null, "Error, no cuenta con suficientes fondos", "Error", JOptionPane.ERROR_MESSAGE);
                    Accion(pasa);
                    return;
                }
                this.adquirir(pasa);
                pasa.setDinero(pasa.getDinero() - getPrecio());
                pasa.getPropiedades().add(this);
                JOptionPane.showMessageDialog(null, "Ha adquirido la propiedad!!", "Atencion", JOptionPane.INFORMATION_MESSAGE);

            } else {
                subastar();
            }
        } else {
            cobrar(pasa);
        }
    }

    public void subastar() {
        new subasta(Tablero.jugadores,this).setVisible(true);
    }

    public void adquirirCasa() {
        if (numCasas < 4 && !hotel) {
            this.numCasas++;
        }
    }

    public void adquirirHotel() {
        if (numCasas == 4) {
            this.numCasas = 0;
            hotel = true;
        }
    }

    /**
     * @return the numCasas
     */
    public int getNumCasas() {
        return numCasas;
    }

    /**
     * @param numCasas the numCasas to set
     */
    public void setNumCasas(int numCasas) {
        this.numCasas = numCasas;
    }

    /**
     * @return the hotel
     */
    public boolean isHotel() {
        return hotel;
    }

    /**
     * @param hotel the hotel to set
     */
    public void setHotel(boolean hotel) {
        this.hotel = hotel;
    }

    /**
     * @return the precio_alquiler
     */
    public int getPrecio_alquiler() {
        return precio_alquiler;
    }

    /**
     * @param precio_alquiler the precio_alquiler to set
     */
    public void setPrecio_alquiler(int precio_alquiler) {
        this.precio_alquiler = precio_alquiler;
    }

    /**
     * @return the costo
     */
    public float getCosto() {
        return precio_alquiler + (precio_alquiler / 4f) + (hotel ? precio_alquiler * 3 : 0);
    }

    /**
     * @return the color
     */
    public Color getColor() {
        return color;
    }

    /**
     * @param color the color to set
     */
    public void setColor(Color color) {
        this.color = color;
    }

    /**
     * @return the hipotecada
     */
    public boolean isHipotecada() {
        return hipotecada;
    }

    /**
     * @param hipotecada the hipotecada to set
     */
    public void setHipotecada(boolean hipotecada) {
        this.hipotecada = hipotecada;
    }
    public String getColorTexto(){
        if(this.color==Color.MAGENTA){
            return "Morado";
        }else if(this.color==Color.CYAN){
            return "Celeste";
        }else if(this.color==Color.PINK){
            return "Rosado";
        }else if(this.color==Color.ORANGE){
            return "Anaranjado";
        }else if(this.color==Color.RED){
            return "Rojo";
        }else if(this.color==Color.YELLOW){
            return "Amarillo";
        }else if(this.color==Color.GREEN){
            return "Verde";
        }else{
            return "Azul";
        }
    }

    @Override
    public void Vender(usuario prop) {
        if(this.color==Color.MAGENTA){
            this.propietario.morado--;
        }else if(this.color==Color.CYAN){
            this.propietario.cian--;
        }else if(this.color==Color.PINK){
            this.propietario.violeta--;
        }else if(this.color==Color.ORANGE){
            this.propietario.naranja--;
        }else if(this.color==Color.RED){
            this.propietario.rojo--;
        }else if(this.color==Color.YELLOW){
            this.propietario.amarillo--;
        }else if(this.color==Color.GREEN){
            this.propietario.verde--;
        }else if(this.color==Color.BLUE){
            this.propietario.azul--;
        }
        this.propietario.getPropiedades().remove(this);
        prop.getPropiedades().add(this);
        this.propietario=prop;
    }
}
